"""
爬取百度贴吧 - 分页
需求：
    请输入关键字： 赵丽颖
    请输入起始页： 1
    请输入终止页： 3
    保存到本地文件 ：
     赵丽颖 目录
        赵丽颖吧_第1页，赵丽颖吧_第2页、赵丽颖吧_第5页  文件
https://tieba.baidu.com/f?kw=%E5%88%98%E4%BA%A6%E8%8F%B2&pn=0   (page-1)*50
https://tieba.baidu.com/f?kw=%E5%88%98%E4%BA%A6%E8%8F%B2&pn=50  第二页 1*50
https://tieba.baidu.com/f?kw=%E5%88%98%E4%BA%A6%E8%8F%B2&pn=100 2*50
https://tieba.baidu.com/f?kw=%E5%88%98%E4%BA%A6%E8%8F%B2&pn=150 3*50
https://tieba.baidu.com/f?kw=%E5%88%98%E4%BA%A6%E8%8F%B2&ie=utf-8&pn=200
"""
import time

import requests
from urllib import parse
from pathlib import Path

class BaiduSpider:
    def __init__(self):
        """定义常用的变量"""
        self.headers = {
            "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/136.0.0.0 Safari/537.36"
        }
        self.url = "https://tieba.baidu.com/f?kw={}&ie=utf-8&pn={}"

    def get_html(self,url):
        """请求的功能，获取响应的内容"""
        html = requests.get(url=url,headers=self.headers).text
        return html


    def parse_html(self):
        """解析提取页面数据的函数"""
        pass

    def save_html(self,folder_name,file_name,html):
        """把爬取到的数据保存到本地"""
        # 1. 创建文件夹
        folder = Path(folder_name)
        folder.mkdir(exist_ok=True)
        # 2. 拼接文件路径
        file_path = folder / file_name
        # 3. 写出文件
        with open(file_path,"w",encoding="utf-8") as f:
            f.write(html)
        print(f"已经保存：{file_path}")

    def run(self):
        """程序入口函数"""
        name = input("请输入关键字：")
        start = int(input("请输入起始页："))
        end = int(input("请输入结束页："))
        # 把name进行编译
        params = parse.quote(name)
        for page in range(start,end+1):
            pn = (page-1)*50
            # 获取每一页的地址
            page_url = self.url.format(params,pn)
            # 发起请求获取响应内容
            html = self.get_html(page_url)
            # 保存爬取到的页面
            file_name = "{}吧_第{}页.html".format(name,page)
            self.save_html(name,file_name,html)
            # 终端提示
            print(f"第{page}页抓取完成")




if __name__ == '__main__':
    bs = BaiduSpider()
    bs.run()


